﻿import mx.transitions.*;
import mx.transitions.easing.*;
class ru.vega_int.firsoff.FillManager
{
	/**
	*@author Firsoff Maxim, icq:235859730, e-mail:firsoff_maxim@mail.ru
	*@description Класс управляет целевым мувиклипом (появление/скрытие) с генерацией соотв. событий, класс применяет как правило для смены состояний сайта/меню (если у них простой фон)
 	*/
	//// PROPERTIES
	//	private
	private var target:MovieClip;					// целевой мувик
	private var fadeInTime:Number;					// время появления
	private var fadeOutTime:Number;					// время скрытия
	private var DEFAULT_TIME:Number = 0.6;			// время по дефолту
	private var transition_manager:TransitionManager;		// менеджер
	private var EASING = None.easeNone;						// исинг
	private var listener:Object;					// слушатель менеджера
	private var isHide:Boolean;						// флаг показывает что заглушка скрыта
	private var feedBackObject:Object;				// Объект обратной передачи...
	private var updateTimer:Number;					// таймер обновления
	// 	public
	var onShow:Function;							// функция-обработчик при появлении
	var onHide:Function;							// функция-обработчки при скрытии
	
	//// METHODS
	//	private
	private function init(Void):Void	// инициализация класса
	{
		var t:FillManager = this;
		listener = new Object();
		if(target._alpha > 0){isHide = false;}
		else{isHide = true;}
		destroy();
		listener.allTransitionsInDone = function(eventObj:Object) 	// инициализируем слушателей
		{
			t.target._alpha = 100;
			t.isHide = false;
			t.onShow(t.target, t.feedBackObject);
		}
		listener.allTransitionsOutDone  = function(eventObj:Object)
		{
			t.target._alpha = 0;
			t.isHide = true;
			t.onHide(t.target, t.feedBackObject);
		}
		target._alpha = 100;
		transition_manager = new TransitionManager(target);
		target._alpha = 0;
		transition_manager.addEventListener("allTransitionsInDone", listener);
		transition_manager.addEventListener("allTransitionsOutDone", listener);
	}
	// 	public
	function show(_feedBackObject:Object, InTime:Number):Void
	{
		//trace('show')
		transition_manager.content = target;
		feedBackObject = _feedBackObject;
		if(isHide)	// если заглушка скрыта
		{
			// проверка на корректность
			if(!isNaN(InTime)){fadeInTime = Math.abs(InTime);}
			//trace('fadeInTime = '+ fadeInTime)
			transition_manager.startTransition({type:Fade, direction:Transition.IN, duration:fadeInTime, easing:EASING});
		}
	}
	
	function hide(OutTime:Number, mode:Boolean):Void
	{
		//trace('hide')
		transition_manager.content = target;	// обновление контента
		if(!isHide || mode)
		{
			// проверка на корректность
			if(!isNaN(OutTime)){fadeOutTime = Math.abs(OutTime);}
			target._alpha = 0;
			//trace('fadeOutTime = '+ fadeOutTime)
			transition_manager.startTransition({type:Fade, direction:Transition.OUT, duration:fadeOutTime, easing:EASING});
		}
	}
	
	function update(t:MovieClip):Void	// обновление контента
	{
		transition_manager.content = t;
	}
	
	function stopAllTransitions():Void
	{
		transition_manager.removeAllTransitions();
	};
	
	function destroy(Void):Void		// уничтожение всех
	{
		transition_manager.removeAllTransitions();
		transition_manager.removeEventListener(listener);
		delete transition_manager;
	};
	
	function get state():String
	{
		if(isHide){return 'hide';}
		else{return 'show';}
	};
	
	//static function getFadeOutTime():Number{return fadeOutTime;}
	//static function getFadeInTime():Number{return fadeInTime;}
	//// CONSTRUCTOR
	/**
	* @param target Клип над которым будут производится манипуляции
	* @param fadeInTime Время проявления
	* @param fadeOutTime Время скрытия
	*/
	function FillManager(target:MovieClip, fadeInTime:Number, fadeOutTime:Number)
	{
		this.target = target;
		if(!isNaN(fadeInTime))
		{
			this.fadeInTime = Math.abs(fadeInTime);
		}
		else
		{
			this.fadeInTime = DEFAULT_TIME;
		}
		if(!isNaN(fadeInTime))
		{
			this.fadeOutTime =  Math.abs(fadeOutTime);
		}
		else
		{
			this.fadeOutTime = DEFAULT_TIME;
		};
		//trace([this.fadeInTime, this.fadeOutTime])
		init();
	}
}